// miniprogram/pages/test/test.js
var app = getApp();
var flag = 0;
var d, d1;
// var questions = require("./module/ques.js");
var questions = "";
Page({
  /**
   * 页面的初始数据
   */
  data: {
    ques: questions, //所有的考题数据，为一个对象数组
    i: 0, //表示要显示的第一个考题的下标
  },
  /**
   * 用户选择答案发生变化时
   */
  radioChange: function (e) {
    questions[this.data.i].userAnswer = e.detail.value; //将用户选择的答案放入考题对象里面去
    this.setData({
      ques: questions,
    });
    console.info(this.data.ques);
  },
  /**
   * 点击下一题
   */
  next: function () {
    var _this = this;
    if (this.data.i + 1 >= app.globalData.total) {  //包含了计算分数与考题的边界控制

      //防抖动处理，避免重复提交试卷
      if (flag == 0) {
        console.info("第一次开始加载分业数据")
        d = new Date();//创建一个普通时间对象，标注当前时刻
        flag = 1;
        //可加可不加
        setTimeout(function () {
          flag = 0;
        }, 1000);
      }
      else {  //不等于0，不是第一点击进行加载
        console.info("非第一次加载数据")
        d1 = new Date(); //获取当前时刻
        //如果上一次的点击和当前的点击时间小于了1s,那么就拒绝再去请求云端数据
        if (d1 - d < 1000) {
          d = d1;
          return;
        }
      }


      var quesv = this.data.ques;
      //计算当前总分
      var stutot = 0; //考生得分
      var all = 100;//满分
      for (let i = 0; i < quesv.length; i++) {
        //如果用户答案与标准答案一致，就说明正确。就加分
        if (quesv[i].userAnswer == quesv[i].standardAnswer) {
          stutot += 1; //计算答对的考题数量
        }
      }
      var title = "";
      if (app.globalData.model == "study") {
        title = "已经到最后一个题了";
      }
      else {
        var totscore = Math.round(stutot / app.globalData.total * 100);//计算考试成绩
        title = '总分为：' + all + ", 你的得分为：" + totscore;
        //将考试成绩入库
        wx.cloud.database().collection("scores").add({
          data: {
            name: app.globalData.userInfo.nickName, //获取用户昵称
            "type": app.globalData.type,//获取用户考试科目
            score: totscore,//获取用户分数
            datetime: new Date().toLocaleString(), //获取考试时间
          },
        })
          .then(function (res) {
            console.info(res)
          });
      }
      wx.showToast({
        title: title,
        icon: "none",
        duration: 1000 * 10,
        mask: true
      })
      setTimeout(function () {
        //考试完成，跳转到其他页面
        wx.redirectTo({
          url: '/pages/modelSelect/modelSelect',
        })
      }, 1000 * 10);

      return;
    }
    //判断当前模式，如果是学习模式，就验证每一个题答案并给出提示
    if (app.globalData.model == "study") {
      var quesv = this.data.ques; //获取到所有的考题
      var i = this.data.i; //当前考题的下标
      if (quesv[i].userAnswer != "" && quesv[i].userAnswer != quesv[i].standardAnswer) {
        wx.showToast({
          title: '您的答案有误，正确答案为：' + quesv[i].standardAnswer,
          icon: "none",
          mask: true, //显示透明蒙层，防止触摸穿透
        })
        return;
      }
    }

    var ival = this.data.i;
    //还剩下五个题时就去发起加载请求，开始加载数据
    var n = 0;
    if (this.data.ques.length - 1 > 5) n = 5;
    if (ival < this.data.ques.length - 1 - n) {
      this.setData({
        i: this.data.i + 1,
      });
    } else {
      //在加载之前先让数据渲染一下，避免用户等待
      if (this.data.i < this.data.ques.length - 1) {
        this.setData({
          i: this.data.i + 1,
        });
      }
      if (flag == 0) {
        console.info("第一次开始加载分业数据")
        d = new Date();//创建一个普通时间对象，标注当前时刻
        flag = 1;
      }
      else {  //不等于0，不是第一点击进行加载
        console.info("非第一次加载数据")
        d1 = new Date(); //获取当前时刻
        //如果上一次的点击和当前的点击时间小于了1s,那么就拒绝再去请求云端数据
        if (d1 - d < 1000) {
          d = d1;
          return;
        }
      }

      //表示做完了当前页所有的题，开始请求新的考题数据
      wx.cloud.database().collection("testDatas").where({
        category: app.globalData.type.toLocaleLowerCase(),
      }).skip(app.globalData.MAX_NUM * app.globalData.pageNum).get()
        .then(function (res) {
          // console.info("res:", res);
          //把获取的考题合并到我们的数据总集合里面
          app.globalData.allData = app.globalData.allData.concat(res.data);
          questions = app.globalData.allData;
          _this.setData({
            ques: app.globalData.allData,
          });
          app.globalData.pageNum += 1; //让页数加1

          //让当前的考题数据顺利的过渡的新的考题内容
          _this.setData({
            i: _this.data.i + 1,
          });
          // allow load(new's datas) after one s
          setTimeout(function () {
            flag = 0;
          }, 1000)
          console.info("this", _this.data);
        })
    }
  },
  /**
   * 回到上一题
   */
  before: function () {
    var ival = this.data.i;
    if (ival > 0) {
      this.setData({
        i: ival - 1,
      });
    } else {
      wx.showToast({
        title: '已经是第一个题了!',
        icon: "none",
        duration: 2000,
      })
    }
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

    wx.showToast({
      title: '数据加载中...',
      icon: "loading",
      duration: 3600 * 1000, //一个小时
    });
    var _this = this;
    //发起网络请求，请求云端数据考题数据集合
    var database = wx.cloud.database(); //获取到了云端数据库链接
    var testDatas = database.collection("testDatas"); //获取数据库集合（mysql中的表）
    //判断当前选择科目有多少条数据
    var totNumber = testDatas.where({
      category: app.globalData.type.toLocaleLowerCase(),
    }).count()
      .then(function (res) {
        console.info(res.total);
        app.globalData.total = res.total; //当前类别的考题总数
      });

    const MAX_NUM = 20; //每页数量
    var totalPageNum = Math.ceil(app.globalData.total / MAX_NUM); //获取到当前总的页数

    //把页数和数量写入到全局数据对象里面
    app.globalData.MAX_NUM = MAX_NUM;
    app.globalData.totalPageNum = totalPageNum;//总的页数
    app.globalData.pageNum = 1; //表示默认为第一页
    app.globalData.allData = []; //默认是一个空数组


    //开始发起网络请求，获取第一页的数据，20条
    testDatas.where({
      category: app.globalData.type.toLocaleLowerCase(),
    }).limit(MAX_NUM).get({
      //当数据获取成功，我们要进行的操作
      success: function (res) {
        console.info(res);
        //把获取的考题合并到我们的数据总集合里面
        app.globalData.allData = app.globalData.allData.concat(res.data);
        //把总的数据集合赋值给用于渲染页面的ques与做相关考题计算的question对象里面
        questions = app.globalData.allData;
        _this.setData({
          ques: app.globalData.allData,
        });
        //在这里，数据就加载完成了，就要关掉加载框
        wx.hideToast();
      },
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})